package converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import entity.EntidadeGenerica;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

/**
 * 
 * @author eco
 */
@FacesConverter(value = "entityConverter")
public class EntityConverter implements Converter{
    
    @Override
    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        if (value != null) {
            return component.getAttributes().get(value);
        }
        return null;
    }

    @Override
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {
        if (value != null && !"".equals(value)) {
            EntidadeGenerica entity = (EntidadeGenerica) value;
            // adiciona item como atributo do componente
            this.addAttribute(component, entity);
            String key = getPersistentObjectId(entity);
            if (key != null) {
                return key;
            }
            return "";
        }
        return (String) value;
    }

    protected void addAttribute(UIComponent component, EntidadeGenerica o) {
        String key = getPersistentObjectId(o);
        if (key != null) {
            component.getAttributes().put(key, o);
        }
    }

    private String getPersistentObjectId(EntidadeGenerica o) {
        if (o != null) {
            if (o.getId() != null) {
                return o.getId().toString();
            } else {
                return String.valueOf(o.hashCode());
            }
        }
        return null;
    }

}
